from django.db import models
from django.utils import timezone


class DataStats(models.Model):
    """数据统计结果表（按天/周/月聚合存储）"""
    # 统计维度：1-日统计，2-周统计，3-月统计
    PERIOD_CHOICES = ((1, "日统计"), (2, "周统计"), (3, "月统计"))
    # 统计类型：1-业务指标，2-合规指标，3-互动指标
    STATS_TYPE_CHOICES = ((1, "业务指标"), (2, "合规指标"), (3, "互动指标"))

    period = models.SmallIntegerField(choices=PERIOD_CHOICES, verbose_name="统计周期")
    stats_type = models.SmallIntegerField(choices=STATS_TYPE_CHOICES, verbose_name="统计类型")
    stats_date = models.DateField(verbose_name="统计日期（日/周日/月初）")
    # 核心业务指标（JSON格式存储，灵活扩展）
    business_data = models.JSONField(default=dict, verbose_name="业务指标数据")
    # 合规指标（JSON格式存储）
    compliance_data = models.JSONField(default=dict, verbose_name="合规指标数据")
    # 互动指标（JSON格式存储）
    interaction_data = models.JSONField(default=dict, verbose_name="互动指标数据")
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")

    class Meta:
        db_table = "data_stats"
        verbose_name = "数据统计结果"
        verbose_name_plural = "数据统计结果"
        unique_together = ("period", "stats_type", "stats_date")  # 避免重复统计
        indexes = [
            models.Index(fields=["period", "stats_date"]),
            models.Index(fields=["stats_type", "stats_date"]),
        ]

    def __str__(self):
        return f"{self.get_period_display()}-{self.get_stats_type_display()}-{self.stats_date}"